<?php

declare(strict_types=1);

namespace app\admin\controller\coupon;

use app\model\CouponBrandType;
use app\model\CouponBrand;
use app\admin\controller\Controller;
use PharIo\Manifest\Email;
use think\Request;
use app\admin\validate\Coupon\BrandType as BrandTypeValidate;

class BrandType extends Controller
{
    /**
     * @var CouponBrandType $model
     */

    /**
     * 充值类型列表
     * @method get
     * @params array $params
     * @return \think\response\Json
     */
    public function list(Request $request)
    {
        $params = $request->param();
        $list = (new CouponBrandType())->brandTypeList($params);
        return success('操作成功', $list);
    }

    /**
     * 新增充值类型
     * @method post
     * @params array $params
     * returns
     */
    public function add(Request $request, BrandTypeValidate $validate)
    {
        $params = $request->only(['name', 'brand_id', 'status', 'sort']);
        $result = $validate->scene('add_brand_type')->check($params);
        if (!$result) {
            return fail($validate->getError());
        }
        //判断品牌类型是否存在或者是否被删除
        $brandModel = new CouponBrand();
        if (!$brandModel->checkExists($params['brand_id'])) {
            return fail('新增失败，品牌不存在或已经被删除');
        }
        //判断同一个品牌下是否存在同样的充值类型
        $brandTypeModel = new CouponBrandType();
        $check = $brandTypeModel->checkExists((int)$params['brand_id'], trim($params['name']));
        if (!$check->isEmpty()) {
            return fail('新增失败，该品牌下已存在'.$params['name'].'的充值类型');
        }
        //判断排序是否存在
//        $sort = $brandTypeModel->checkIsExistsSort($params['brand_id'],$params['sort']);
//        if (!empty($sort['id'])) {
//            return fail('新增失败，该品牌下已存在排序'.$params['sort']);
//        }
        $data = CouponBrandType::create($params);
        return success('新增成功', ['id' => $data->id]);
    }

    /**
     * 修改品牌类型
     * @method put
     * @params array $params
     * returns
     */
    public function edit(Request $request, BrandTypeValidate $validate)
    {
        $params = $request->only(['id','name', 'brand_id', 'status', 'sort']);
        $result = $validate->scene('edit_brand_type')->check($params);
        if(!$result) {
            return fail($validate->getError());
        }
        //判断品牌类型是否存在或者是否被删除
        $brandModel = new CouponBrand();
        if (!$brandModel->checkExists($params['brand_id'])) {
            return fail('新增失败，品牌不存在或已经被删除');
        }
        //判断该条数据是否还存在
        $brandTypeModel = new CouponBrandType();
        $info = CouponBrandType::where('id', $params['id'])->findOrEmpty();
        if ($info->isEmpty()) {
            return fail('修改失败，充值类型不存在');
        }
        //判断同一个品牌下是否存在同样的品牌类型
        $check = $brandTypeModel->checkExists((int)$params['brand_id'], trim($params['name']));
        if (!$check->isEmpty() && $check->id != $params['id']) {
            return fail('修改失败，该品牌下已存在'.$params['name']);
        }
        //判断排序是否存在
//        $sort = $brandTypeModel->checkIsExistsSort((int)$params['brand_id'],$params['sort']);
//        if (!empty($sort['id']) && $sort['id'] != $params['id']) {
//            return fail('编辑失败，该品牌下已存在相同排序序号');
//        }
        CouponBrandType::update($params);
        return success('修改成功', ['id' =>$params['id']]);
    }

    /**
     * 修改品牌类型显示状态
     * @method PATCH
     * @params array $params
     * returns
     */
    public function status(Request $request, BrandTypeValidate $validate)
    {
        $params = $request->only(['id','status'], 'patch');
        $result = $validate->scene('set_status')->check($params);
        if(!$result) {
            return fail($validate->getError());
        }
        //判读是否存在
        $info = CouponBrandType::where('id', $params['id'])->findOrEmpty();
        if ($info->isEmpty()) {
            return fail('充值类型不存在或已经被删除');
        }
        CouponBrandType::update($params);
        return success('修改成功', ['id' =>$params['id']]);
    }

    /**
     * 删除
     * @method PATCH
     * @params int $id
     * returns
     */
    public function del(Request $request)
    {
        $id = $request->param('id');
        if (!is_numeric($id)) {
            return fail('参数错误');
        }
        //判读是否存在
        $info = CouponBrandType::where('id', $id)->findOrEmpty();
        if ($info->isEmpty()) {
            return fail('充值类型不存在或已经被删除');
        }
        $info->delete();
        return success('删除成功', ['id' =>$id]);
    }

    /**
     * 查询特定品牌下的品牌类型
     * @access public
     * @method get
     * @params integer $id
     * @return \think\response\Json
     */
    public function brandTypeSelect(Request $request)
    {
        $brand_id = $request->param('brand_id');
        if (empty($brand_id)) {
            return fail('品牌id不能为空');
        }
        $list = (new CouponBrandType())->brandTypeSelect($brand_id);
        return success('请求成功', $list);
    }










}